// 中间件 自定义了 401 响应，将用户验证失败的相关信息返回给浏览器
module.exports = (app) => {
    app.use(function(ctx, next){
        return next().catch((err) => {
            if (401 == err.status) {
                ctx.status = 401;
                ctx.body = 'Protected resource, use Authorization header to get access\n';
            } else {
                throw err;
            }
        });
    });

// 未受保护的中间件，一般用于开放的不需要用户验证的接口
    app.use(function(ctx, next){
        if (ctx.url.match(/^\/public/)) {
            ctx.body = 'unprotected\n';
        } else {
            return next();
        }
    });

// 后面的中间件只有jwt验证通过才会执行，达到用户验证的效果
    app.use(jwt({ secret: 'shared-secret' }));

// 受保护的中间件，通常是需要用户验证的接口
    app.use(function(ctx){
        if (ctx.url.match(/^\/api/)) {
            ctx.body = 'protected\n';
        }
    });
}